#include
#include
#include
// This example cycles through all GPIB devices and prints out
// each instrument's *idn? query.
int main(int argc, char* argv[])
{
ViSession rm = VI_NULL, vi = VI_NULL;
ViStatus status;
ViChar desc[256], id[256], buffer[256];
ViUInt32 retCnt, itemCnt;
ViFindList list;
ViUInt32 i;
// Open a default Session
status = viOpenDefaultRM(&rm);
if (status < VI_SUCCESS) goto error;
// Find all GPIB devices
status = viFindRsrc(rm, "GPIB?*INSTR", &list, &itemCnt, desc);
if (status < VI_SUCCESS) goto error;
for (i = 0; i < itemCnt; i++) {
// Open resource found in rsrc list
status = viOpen(rm, desc, VI_NULL, VI_NULL, &vi);
if (status < VI_SUCCESS) goto error;
// Send an ID query.
status = viWrite(vi, (ViBuf) "*idn?", 5, &retCnt);
if (status < VI_SUCCESS) goto error;
// Clear the buffer and read the response
memset(id, 0, sizeof(id));
status = viRead(vi, (ViBuf) id, sizeof(id), &retCnt);
if (status < VI_SUCCESS) goto error;
// Print the response
printf("id: %s: %s\n", desc, id);
// We're done with this device so close it
viClose(vi);
// Get the next item
viFindNext(list, desc);
}
// Clean up
viClose(rm);
return 0;
error:
// Report error and clean up
viStatusDesc(vi, status, buffer);
fprintf(stderr, "failure: %s\n", buffer);
if (rm != VI_NULL) {
viClose(rm);
}
return 1;
}